﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntityLayer;
namespace DataLayer.DAO
{
    public class clsDocumentoDAO
    {
        private BDCALLCENTEREntities ContextoDeObjs = new BDCALLCENTEREntities();
        public bool Insertar(Documento Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("Documento", Obj);
                ContextoDeObjs.SaveChanges(); 
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            
        }
        public bool Modificar(Documento obj)
        {

            try
            {
                ContextoDeObjs.AttachTo("Documento", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Eliminar(Documento obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("Documento", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public List<Documento> listar()
        {
            List<Documento> lista = new List<Documento>();
            var q = from c in ContextoDeObjs.Documento
                    select c;
            lista = q.ToList();
            return lista;
        }
        
        public String TraerUltimoID()
        {
            var q = (from d in ContextoDeObjs.Documento
                     select new
                     {
                         d.NumeroDocumento
                     }).OrderBy(x => x.NumeroDocumento);

            if (q.ToList().Count > 0)
                return (Convert.ToInt64(q.ToList()[q.ToList().Count - 1].NumeroDocumento) + 1).ToString("000000000000000");
            else
                return (1).ToString("000000000000000");
        }

        public List<ListarPedidosVentas> ListaPedidosVentas()
        {
            List<ListarPedidosVentas> lista = new List<ListarPedidosVentas>();
            var q = from c in ContextoDeObjs.ListarPedidosVentas()
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<DocumentoCabecera_Result> ListarDocumentoCabecera(String nropedido)
        {
            List<DocumentoCabecera_Result> lista = new List<DocumentoCabecera_Result>();
            var q = from c in ContextoDeObjs.usp_DocumentoCabecera(nropedido)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<VerificarDiasCancelacion_Result> VerificarDiasCancelacion(int empresa, String tipoDoc, String nropedido)
        {
            List<VerificarDiasCancelacion_Result> lista = new List<VerificarDiasCancelacion_Result>();
            var q = from c in ContextoDeObjs.usp_VerificarDiasCancelacion(empresa, tipoDoc, nropedido)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<ListarPedidosVentasCP_Result> ListaPedidosVentasCP(int codcliente, int codempresa, String codoperador, int codvendedor, String estado, String fhinicial, String fhfinal, String tipoencuesta)
        {
            List<ListarPedidosVentasCP_Result> lista = new List<ListarPedidosVentasCP_Result>();
            var q = from c in ContextoDeObjs.usp_ListarPedidosVentasCP(codcliente, codempresa, codoperador, codvendedor, estado, fhinicial, fhfinal, tipoencuesta)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<CalculoComisiones_Result> CalcularComisiones(String fechaDesde, String fechaHasta)
        {
            List<CalculoComisiones_Result> lista = new List<CalculoComisiones_Result>();
            var q = from c in ContextoDeObjs.usp_CalculoComisiones(fechaDesde, fechaHasta)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<CalculoComisionesXVendedor_Result> CalcularComisionesXVendedor(int codEmpleado, String fechaDesde, String fechaHasta)
        {
            List<CalculoComisionesXVendedor_Result> lista = new List<CalculoComisionesXVendedor_Result>();
            var q = from c in ContextoDeObjs.usp_CalculoComisionesXVendedor(codEmpleado, fechaDesde, fechaHasta)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<DocumentoCabecera_InfoAuditoria_Result> ListarDocumentoCabeceraAuditoria(String nropedido)
        {
            List<DocumentoCabecera_InfoAuditoria_Result> lista = new List<DocumentoCabecera_InfoAuditoria_Result>();
            var q = from c in ContextoDeObjs.usp_DocumentoCabecera_InfoAuditoria(nropedido)
                    select c;
            lista = q.ToList();
            return lista;
        }

        public Boolean AprobarDocumento(int empresa, String tipodoc, String nropedido)
        {
            int cant = 0;
            var q = from c in ContextoDeObjs.usp_AprobarDocumento(empresa, tipodoc, nropedido)
                    select c;
            //q.ToList()[q.ToList().Count - 1]
            cant = Convert.ToInt16(q.ToList()[0].result.ToString());
            Boolean ok = (cant > 1) ? true: false;
            return ok;
        }
    }
}